package com.ideal.service.impl;

import com.ideal.dto.config.req.ConfigDetailReqDto;
import com.ideal.dto.config.req.FileConfigDto;
import com.ideal.dto.config.req.FileConfigPageReqDto;
import com.ideal.dto.config.res.ConfigRspDto;
import com.ideal.dto.config.res.FileConfigPageRsqDto;
import com.ideal.enums.FileTypeEnum;
import com.ideal.mapper.ConfigMapper;
import com.ideal.model.Config;
import com.ideal.service.IConfigService;
import com.ideal.util.file.ExeclUtil;
import com.ideal.util.file.IniUtil;
import com.ideal.util.file.PropertiesUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 配置Service业务层处理
 *
 * @author songfz
 * @date 2022-07-13
 */
@Service
public class ConfigServiceImpl implements IConfigService
{

    @Autowired
    private  ConfigMapper configMapper;

    /**
     * 查询配置
     *
     * @param id 配置主键
     * @return 配置
     */
    @Override
    public Config selectConfigById(Long id)
    {
        return configMapper.selectConfigById(id);
    }

    /**
     * 查询配置列表
     *
     * @param config 配置
     * @return 配置
     */
    @Override
    public List<Config> selectConfigList(Config config)
    {
        return configMapper.selectConfigList(config);
    }

    /**
     * 新增配置
     *
     * @param config 配置
     * @return 结果
     */
    @Override
    public int insertConfig(Config config)
    {
        return configMapper.insertConfig(config);
    }

    /**
     * 修改配置
     *
     * @param config 配置
     * @return 结果
     */
    @Override
    public int updateConfig(Config config)
    {
        return configMapper.updateConfig(config);
    }

    /**
     * 批量删除配置
     *
     * @param ids 需要删除的配置主键
     * @return 结果
     */
    @Override
    public int deleteConfigByIds(Long[] ids)
    {
        return configMapper.deleteConfigByIds(ids);
    }

    /**
     * 删除配置信息
     *
     * @param id 配置主键
     * @return 结果
     */
    @Override
    public int deleteConfigById(Long id)
    {
        return configMapper.deleteConfigById(id);
    }

    @Override
    public List<FileConfigPageRsqDto> findByPageParams(FileConfigPageReqDto pageReqDto) {
        return configMapper.findByPageParams(pageReqDto);
    }

    @Override
    public ConfigRspDto findDetailByVersion(String version) {
        final ConfigRspDto configRspDto = configMapper.findDetailByVersion(version);
        final String path = configRspDto.getFileUrl();
        String suffix = path.substring(path.lastIndexOf(".") + 1);

        if (FileTypeEnum.INI.getSubfix().equals(suffix)) {

            configRspDto.setContent(IniUtil.parse(configRspDto.getContent()));
        } else if (FileTypeEnum.PROPERTIES.getSubfix().equals(suffix)) {

            configRspDto.setContent(PropertiesUtil.parse(configRspDto.getContent()));
        } else {
        }
        return configRspDto;
    }

    @Override
    public ConfigRspDto findBaseByConfigId(Long configId) {

       return configMapper.findBaseByConfigId(configId);
    }

    @Override
    public Config selectByConfigDto(FileConfigDto configDto) {

        return configMapper.selectByConfigDto(configDto);
    }

    @Override
    public Integer existEnNameAndRule(String fileEnName, String ruleGroup) {
        return configMapper.existEnNameAndRule(fileEnName,ruleGroup);
    }


}
